﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using negocios;
using objetos;
using publico;
using System.Web.Services;
using System.Web.Script.Serialization;
using System.Transactions;
using System.Data;
using System.Text;



namespace softsales.pagina.produto
{
    public partial class produto_formulario : System.Web.UI.Page
    {
        // produto

        BLL_TB_PRODUTO b_tb_produto = new BLL_TB_PRODUTO();
        OBJ_TB_PRODUTO o_tb_produto = new OBJ_TB_PRODUTO();

        BLL_TB_PRODUTO_IMPOSTO b_tb_produto_imposto = new BLL_TB_PRODUTO_IMPOSTO();
        OBJ_TB_PRODUTO_IMPOSTO o_tb_produto_imposto = new OBJ_TB_PRODUTO_IMPOSTO();

        // produto detalhe

        BLL_TB_PRODUTO_DETALHE b_tb_produto_detalhe = new BLL_TB_PRODUTO_DETALHE();
        OBJ_TB_PRODUTO_DETALHE o_tb_produto_detalhe = new OBJ_TB_PRODUTO_DETALHE();

        // produto usuario
        OBJ_TB_PRODUTO_USUARIO o_tb_produto_usuario = new OBJ_TB_PRODUTO_USUARIO();
        BLL_TB_PRODUTO_USUARIO b_tb_produto_usuario = new BLL_TB_PRODUTO_USUARIO();
        
        // dropdownlist
        BLL_TB_PRODUTO_CATEGORIA b_tb_produto_categoria = new BLL_TB_PRODUTO_CATEGORIA();
        BLL_TB_PRODUTO_MARCA b_tb_produto_marca = new BLL_TB_PRODUTO_MARCA();
        BLL_TB_ORIGEM_PRODUTO b_tb_origem_produto = new BLL_TB_ORIGEM_PRODUTO();
        BLL_TB_GENERO_PRODUTO_SERVICO b_tb_genero_produto_servico = new BLL_TB_GENERO_PRODUTO_SERVICO();
        OBJ_TB_GENERO_PRODUTO_SERVICO o_tb_genero_produto_servico = new OBJ_TB_GENERO_PRODUTO_SERVICO();

        BLL_TB_COR b_tb_cor = new BLL_TB_COR();
        BLL_TB_TIPO_PRODUCAO b_tb_tipo_producao = new BLL_TB_TIPO_PRODUCAO();
        BLL_TB_TIPO_ITEM b_tb_tipo_item = new BLL_TB_TIPO_ITEM();
        BLL_TB_UNIDADE_MEDIDA b_tb_unidade_medida = new BLL_TB_UNIDADE_MEDIDA();

        BLL_TB_IMPOSTO_CSOSN b_tb_imposto_csosn = new BLL_TB_IMPOSTO_CSOSN();
        OBJ_TB_IMPOSTO_CSOSN o_tb_imposto_csosn = new OBJ_TB_IMPOSTO_CSOSN();

        BLL_TB_IMPOSTO_CST_COFINS b_tb_imposto_cst_cofins = new BLL_TB_IMPOSTO_CST_COFINS();
        OBJ_TB_IMPOSTO_CST_COFINS o_tb_imposto_cst_cofins = new OBJ_TB_IMPOSTO_CST_COFINS();

        BLL_TB_IMPOSTO_CST_ICMS b_tb_imposto_cst_icms = new BLL_TB_IMPOSTO_CST_ICMS();
        OBJ_TB_IMPOSTO_CST_ICMS o_tb_imposto_cst_icms = new OBJ_TB_IMPOSTO_CST_ICMS();

        BLL_TB_IMPOSTO_CST_IPI b_tb_imposto_cst_ipi = new BLL_TB_IMPOSTO_CST_IPI();
        OBJ_TB_IMPOSTO_CST_IPI o_tb_imposto_cst_ipi = new OBJ_TB_IMPOSTO_CST_IPI();

        BLL_TB_IMPOSTO_CST_PIS b_tb_imposto_cst_pis = new BLL_TB_IMPOSTO_CST_PIS();
        OBJ_TB_IMPOSTO_CST_PIS o_tb_imposto_cst_pis = new OBJ_TB_IMPOSTO_CST_PIS();

        BLL_TB_SERVICO b_tb_servico = new BLL_TB_SERVICO();

        BLL_TB_TIPO_COMPARTIMENTO b_tb_tipo_compartimento = new BLL_TB_TIPO_COMPARTIMENTO();

        BLL_TB_MODALIDADE_BC_ICMS b_tb_modalidade_bc_icms = new BLL_TB_MODALIDADE_BC_ICMS();
        BLL_TB_MODALIDADE_BC_ICMS_ST b_tb_modalidade_bc_icms_st = new BLL_TB_MODALIDADE_BC_ICMS_ST();
        BLL_TB_PRODUTO_GRUPO b_tb_produto_grupo = new BLL_TB_PRODUTO_GRUPO();

        BLL_TB_ESTOQUE_LOCAL b_tb_estoque_local = new BLL_TB_ESTOQUE_LOCAL();


        BLL_TB_NCM b_tb_ncm = new BLL_TB_NCM();
        OBJ_TB_NCM o_tb_ncm = new OBJ_TB_NCM();

        BLL_TB_CFOP b_tb_cfop = new BLL_TB_CFOP();
        OBJ_TB_CFOP o_tb_cfop = new OBJ_TB_CFOP();

        BLL_TB_LOG_ERRO b_tb_log_erro = new BLL_TB_LOG_ERRO();

        protected void Page_Load(object sender, EventArgs e)
        {            

            if (PUB_SESSAO.Logado())
            {

                if (!IsPostBack)
                {
                    PUB_PAGINACAO.Inicializa();

                    PUB_PAGINACAO.PageSize = 5;

                    b_tb_cor.PreencheControle(DDL_ID_COR, true);                                                                     
                    b_tb_origem_produto.PreencheControle(DDL_ID_ORIGEM_PRODUTO, true);
                    b_tb_produto_categoria.PreencheControle(DDL_ID_CATEGORIA, true);
                    b_tb_produto_marca.PreencheControle(DDL_ID_MARCA, true);
                    b_tb_tipo_item.PreencheControle(DDL_ID_TIPO_ITEM, true);
                    b_tb_tipo_producao.PreencheControle(DDL_ID_TIPO_PRODUCAO, true);
                    b_tb_unidade_medida.PreencheControle(DDL_ID_UNIDADE_MEDIDA, true);
                    b_tb_servico.PreencheControle(DDL_ID_SERVICO, true);
                    b_tb_modalidade_bc_icms.PreencheControle(DDL_ID_MODALIDADE_BC_ICMS, true);
                    b_tb_modalidade_bc_icms_st.PreencheControle(DDL_ID_MODALIDADE_BC_ICMS_ST, true);
                    b_tb_produto_grupo.PreencheControle(DDL_ID_PRODUTO_GRUPO, true);
                    b_tb_estoque_local.PreencheControle(DDL_ID_ESTOQUE_LOCAL, true);
                    b_tb_tipo_compartimento.PreencheControle(DDL_ID_TIPO_COMPARTIMENTO, true);

                    DDL_ID_ORIGEM_PRODUTO.SelectedValue = string.Format("{0}",(int)PUB_ENUM.ORIGEM_PRODUTO.NACIONAL);
                    DDL_ID_TIPO_PRODUCAO.SelectedValue = string.Format("{0}", (int)PUB_ENUM.TIPO_PRODUCAO.PROPRIO);

                    CHK_SIT_ATIVO.Checked = true;
                    TXT_VALOR_ALIQ_COFINS.Text = "0,00";
                    TXT_VALOR_ALIQ_COFINS_ST.Text = "0,00";
                    TXT_VALOR_ALIQ_CSLL.Text = "0,00";
                    TXT_VALOR_ALIQ_ICMS.Text = "0,00";
                    TXT_VALOR_ALIQ_ICMS_ST.Text = "0,00";
                    TXT_VALOR_ALIQ_IPI.Text = "0,00";
                    TXT_VALOR_ALIQ_IRPJ.Text = "0,00";
                    TXT_VALOR_ALIQ_IRRF.Text = "0,00";
                    TXT_VALOR_ALIQ_ISS.Text = "0,00";
                    TXT_VALOR_ALIQ_MVA_ST.Text = "0,00";
                    TXT_VALOR_ALIQ_PIS.Text = "0,00";
                    TXT_VALOR_ALIQ_PIS_ST.Text = "0,00";
                    TXT_VALOR_VENDA.Text = "0,00";
                    TXT_VALOR_CUSTO.Text = "0,00";
                    TXT_VALOR_CUSTO_MEDIO.Text = "0,00";
                    TXT_VALOR_MARGEM_LUCRO.Text = "0,00";
                    TXT_VALOR_RED_ALIQ_BC_ICMS_ST.Text = "0,00";
                    TXT_VALOR_RED_ALIQ_ICMS.Text = "0,00";                     

                    

                    CHK_SIT_ATIVO.Checked = true;

                    if (Request["id"] != null)
                    {
                        Editar(Request["id"].ToString());
              
                        LBL_TITULO_PAGINA.Text = "Editar Produto";

             
                    }
                    else
                    {
              
                        LBL_TITULO_PAGINA.Text = "Incluir Produto";

              
                    }

                   

                }
                else
                {

                    // NCM
                    if (Session["id_ncm"]!=null)
                    {
                        TXT_ID_NCM.Text = Session["id_ncm"].ToString();
                        if (TXT_ID_NCM.Text != string.Empty)
                        {
                            o_tb_ncm = b_tb_ncm.SelecionarObjetoPorId(Convert.ToInt32(TXT_ID_NCM.Text));
                            TXT_DESCRICAO_NCM.Text = o_tb_ncm.desc_ncm.ToString();
                            TXT_DESCRICAO_NCM.Focus();
                            Session.Remove("id_ncm");
                        }

                        
                        
                    }

                    // GENERO PRODUTO SERVICO
                    if (Session["id_gen_prod_serv"]!=null)
                    {
                        TXT_ID_GENERO_PRODUTO_SERVICO.Text = Session["id_gen_prod_serv"].ToString();

                        if (TXT_ID_GENERO_PRODUTO_SERVICO.Text != string.Empty)
                        {
                            o_tb_genero_produto_servico = b_tb_genero_produto_servico.SelecionarObjetoPorId(Convert.ToInt32(TXT_ID_GENERO_PRODUTO_SERVICO.Text));
                            TXT_ID_GENERO_PRODUTO_SERVICO.Text = o_tb_genero_produto_servico.id.ToString();
                            TXT_DESC_GEN_PROD_SERV.Text = o_tb_genero_produto_servico.desc_genero_produto_servico.ToString();

                            TXT_DESC_GEN_PROD_SERV.Focus();
                            Session.Remove("id_gen_prod_serv");
                        }
                        


                    }

            

                    // IMPOSTO ICMS
                    if (Session["id_imposto_cst_icms"]!=null)
                    {
                        TXT_ID_IMPOSTO_CST_ICMS.Text = (string)Session["id_imposto_cst_icms"];

                        if (TXT_ID_IMPOSTO_CST_ICMS.Text != string.Empty)
                        {
                            o_tb_imposto_cst_icms = b_tb_imposto_cst_icms.SelecionarObjetoPorId(TXT_ID_IMPOSTO_CST_ICMS.Text);

                            TXT_DESC_IMPOSTO_CST_ICMS.Text = o_tb_imposto_cst_icms.desc_imposto_cst_icms.ToString();

                            TXT_DESC_IMPOSTO_CST_ICMS.Focus();

                            Session.Remove("id_imposto_cst_icms");

                        }
                      
                    }

                    // IMPOSTO IPI
                    if (Session["id_imposto_cst_ipi"]!=null)
                    {
                        TXT_ID_IMPOSTO_CST_IPI.Text = (string)Session["id_imposto_cst_ipi"];

                        if (TXT_ID_IMPOSTO_CST_IPI.Text != string.Empty)
                        {
                            o_tb_imposto_cst_ipi = b_tb_imposto_cst_ipi.SelecionarObjetoPorId(TXT_ID_IMPOSTO_CST_IPI.Text);

                            TXT_DESC_IMPOSTO_CST_IPI.Text = o_tb_imposto_cst_ipi.desc_imposto_cst_ipi.ToString();

                            TXT_DESC_IMPOSTO_CST_IPI.Focus();

                            Session.Remove("id_imposto_cst_ipi");
                        }
                     
                    }


                    // IMPOSTO PIS
                    if (Session["id_imposto_cst_pis"]!=null)
                    {
                        TXT_ID_IMPOSTO_CST_PIS.Text = (string)Session["id_imposto_cst_pis"];
                        if (TXT_ID_IMPOSTO_CST_PIS.Text != string.Empty)
                        {
                            o_tb_imposto_cst_pis = b_tb_imposto_cst_pis.SelecionarObjetoPorId(TXT_ID_IMPOSTO_CST_PIS.Text);

                            TXT_DESC_IMPOSTO_CST_PIS.Text = o_tb_imposto_cst_pis.desc_imposto_cst_pis.ToString();

                            TXT_DESC_IMPOSTO_CST_PIS.Focus();

                            Session.Remove("id_imposto_cst_pis");
                        }
                       
                    }


                    // IMPOSTO COFINS,
                    if (Session["id_imposto_cst_cofins"]!=null)                    
                    {
                        TXT_ID_IMPOSTO_CST_COFINS.Text = (string)Session["id_imposto_cst_cofins"];
                        if (TXT_ID_IMPOSTO_CST_COFINS.Text != string.Empty)
                        {
                            o_tb_imposto_cst_cofins = b_tb_imposto_cst_cofins.SelecionarObjetoPorId(TXT_ID_IMPOSTO_CST_COFINS.Text);

                            TXT_DESC_IMPOSTO_CST_COFINS.Text = o_tb_imposto_cst_cofins.desc_imposto_cst_cofins.ToString();

                            TXT_DESC_IMPOSTO_CST_COFINS.Focus();

                            Session.Remove("id_imposto_cst_cofins");
                        }
                     
                    }


                    // CFOP
                    if (Session["id_cfop"] != null)
                    {
                        TXT_ID_CFOP.Text = (string)Session["id_cfop"];
                        if (TXT_ID_CFOP.Text != string.Empty)
                        {
                            o_tb_cfop = b_tb_cfop.SelecionarObjetoPorId(Convert.ToInt32(TXT_ID_CFOP.Text));

                            TXT_ID_CFOP.Text = o_tb_cfop.id.ToString();

                            Session.Remove("id_cfop");
                        }

                    }


                }

            }

        }

        private void Editar(String id)
        {

            o_tb_produto = b_tb_produto.SelecionarObjetoPorId(Convert.ToInt32(id));           
            o_tb_produto_imposto = b_tb_produto_imposto.SelecionarObjetoPorId(o_tb_produto.id);
            o_tb_produto_detalhe = b_tb_produto_detalhe.SelecionarObjetoPorId(o_tb_produto.id);            
            o_tb_genero_produto_servico = b_tb_genero_produto_servico.SelecionarObjetoPorId(o_tb_produto.id_genero_produto_servico);        
            o_tb_ncm = b_tb_ncm.SelecionarObjetoPorId(o_tb_produto.id_ncm);
            o_tb_imposto_cst_cofins = b_tb_imposto_cst_cofins.SelecionarObjetoPorId(o_tb_produto_imposto.id_cst_cofins);
            o_tb_imposto_cst_icms = b_tb_imposto_cst_icms.SelecionarObjetoPorId(o_tb_produto_imposto.id_cst_icms);
            o_tb_imposto_cst_ipi = b_tb_imposto_cst_ipi.SelecionarObjetoPorId(o_tb_produto_imposto.id_cst_ipi);
            o_tb_imposto_cst_pis = b_tb_imposto_cst_pis.SelecionarObjetoPorId(o_tb_produto_imposto.id_cst_pis);                        

            // DESCRICAO
            TXT_DESC_GEN_PROD_SERV.Text = o_tb_genero_produto_servico.desc_genero_produto_servico.ToString();
            TXT_DESCRICAO_NCM.Text = o_tb_ncm.desc_ncm.ToString();

            

            // PRODUTO
            HF_ID.Value = o_tb_produto.id.ToString();
            DDL_ID_SERVICO.SelectedValue = o_tb_produto.id_servico_issqn.ToString();
            DDL_ID_MARCA.SelectedValue = o_tb_produto.id_marca.ToString();
            DDL_ID_PRODUTO_GRUPO.SelectedValue = o_tb_produto.id_grupo.ToString();
            DDL_ID_CATEGORIA.SelectedValue = o_tb_produto.id_categoria.ToString();          
            TXT_ID_NCM.Text = o_tb_produto.id_ncm.ToString();
            TXT_EXTIPI.Text = o_tb_produto.extipi.ToString();
            TXT_ID_GENERO_PRODUTO_SERVICO.Text = o_tb_produto.id_genero_produto_servico.ToString();
            DDL_ID_TIPO_ITEM.SelectedValue = o_tb_produto.id_tipo_item.ToString();
            DDL_ID_TIPO_PRODUCAO.SelectedValue = o_tb_produto.id_tipo_producao.ToString();
            TXT_EAN.Text = o_tb_produto.ean.ToString();
            TXT_DESCRICAO.Text = o_tb_produto.descricao.ToString();                      
            TXT_VALOR_CUSTO.Text = o_tb_produto.valor_custo.ToString();
            TXT_VALOR_VENDA.Text = o_tb_produto.valor_venda.ToString();
            DDL_ID_UNIDADE_MEDIDA.SelectedValue = o_tb_produto.id_unidade_medida.ToString();
            DDL_ID_ESTOQUE_LOCAL.SelectedValue = o_tb_produto.id_estoque_local.ToString();
            TXT_VALOR_VENDA.Text = PUB_FUNCOES.FormataNumerico(o_tb_produto.valor_venda.ToString());
            TXT_VALOR_CUSTO.Text = PUB_FUNCOES.FormataNumerico(o_tb_produto.valor_custo.ToString());
            TXT_VALOR_CUSTO_MEDIO.Text = PUB_FUNCOES.FormataNumerico(o_tb_produto.valor_custo_medio.ToString());
            TXT_VALOR_MARGEM_LUCRO.Text = PUB_FUNCOES.FormataNumerico(o_tb_produto.valor_margem_lucro.ToString());

            CHK_SIT_ATIVO.Checked = o_tb_produto.sit_ativo;



            // DETALHE DO PRODUTO 
            DDL_ID_COR.SelectedValue = o_tb_produto_detalhe.id_cor.ToString();
            TXT_PESO_BRUTO.Text = o_tb_produto_detalhe.peso_bruto.ToString();
            TXT_PESO_LIQUIDO.Text = o_tb_produto_detalhe.peso_liquido.ToString();
            TXT_LARGURA.Text = o_tb_produto_detalhe.largura.ToString();
            TXT_PROFUNDIDADE.Text = o_tb_produto_detalhe.profundidade.ToString();
            TXT_ALTURA.Text = o_tb_produto_detalhe.altura.ToString();
            TXT_VOLUME.Text = o_tb_produto_detalhe.volume.ToString();
            DDL_ID_TIPO_COMPARTIMENTO.SelectedValue = o_tb_produto_detalhe.id_tipo_compartimento.ToString();            

            // PRODUTO IMPOSTO                             
            TXT_ID_IMPOSTO_CST_COFINS.Text = o_tb_produto_imposto.id_cst_cofins.ToString();
            TXT_ID_IMPOSTO_CST_ICMS.Text = o_tb_produto_imposto.id_cst_icms.ToString();
            TXT_ID_IMPOSTO_CST_IPI.Text = o_tb_produto_imposto.id_cst_ipi.ToString();
            TXT_ID_IMPOSTO_CST_PIS.Text = o_tb_produto_imposto.id_cst_pis.ToString();
            
            // IMPOSTO DESCRICAO
            DDL_ID_ORIGEM_PRODUTO.SelectedValue = o_tb_produto_imposto.id_origem_produto.ToString();      
            TXT_DESC_IMPOSTO_CST_COFINS.Text = o_tb_imposto_cst_cofins.desc_imposto_cst_cofins.ToString();
            TXT_DESC_IMPOSTO_CST_ICMS.Text = o_tb_imposto_cst_icms.desc_imposto_cst_icms.ToString();
            TXT_DESC_IMPOSTO_CST_IPI.Text = o_tb_imposto_cst_ipi.desc_imposto_cst_ipi.ToString();
            TXT_DESC_IMPOSTO_CST_PIS.Text = o_tb_imposto_cst_pis.desc_imposto_cst_pis.ToString();
           
            
            DDL_ID_MODALIDADE_BC_ICMS.SelectedValue = o_tb_produto_imposto.id_modalidade_bc_icms.ToString();
            DDL_ID_MODALIDADE_BC_ICMS_ST.SelectedValue = o_tb_produto.Tb_produto_imposto.id_modalidade_bc_icms_st.ToString();
            CHK_SIT_RETEM_IRRF.Checked = Convert.ToBoolean(o_tb_produto_imposto.sit_retem_irrf);
            TXT_VALOR_ALIQ_COFINS.Text = PUB_FUNCOES.FormataNumerico(o_tb_produto_imposto.valor_aliq_cofins.ToString());
            TXT_VALOR_ALIQ_COFINS_ST.Text = PUB_FUNCOES.FormataMoeda(o_tb_produto_imposto.valor_aliq_cofins_st.ToString());
            TXT_VALOR_ALIQ_CSLL.Text = PUB_FUNCOES.FormataNumerico(o_tb_produto_imposto.valor_aliq_csll.ToString());
            TXT_VALOR_ALIQ_ICMS.Text = PUB_FUNCOES.FormataNumerico(o_tb_produto_imposto.valor_aliq_icms.ToString());
            TXT_VALOR_ALIQ_ICMS_ST.Text = PUB_FUNCOES.FormataNumerico(o_tb_produto_imposto.valor_aliq_icms_st.ToString());
            TXT_VALOR_ALIQ_IPI.Text = PUB_FUNCOES.FormataNumerico(o_tb_produto_imposto.valor_aliq_ipi.ToString());
            TXT_VALOR_ALIQ_IRPJ.Text = PUB_FUNCOES.FormataNumerico(o_tb_produto_imposto.valor_aliq_irpj.ToString());
            TXT_VALOR_ALIQ_IRRF.Text = PUB_FUNCOES.FormataNumerico(o_tb_produto_imposto.valor_aliq_irrf.ToString());
            TXT_VALOR_ALIQ_ISS.Text = PUB_FUNCOES.FormataNumerico(o_tb_produto_imposto.valor_aliq_iss.ToString());
            TXT_VALOR_ALIQ_MVA_ST.Text = PUB_FUNCOES.FormataNumerico(o_tb_produto_imposto.valor_aliq_mva_st.ToString());
            TXT_VALOR_ALIQ_PIS.Text = PUB_FUNCOES.FormataNumerico(o_tb_produto_imposto.valor_aliq_pis.ToString());
            TXT_VALOR_ALIQ_PIS_ST.Text = PUB_FUNCOES.FormataNumerico(o_tb_produto_imposto.valor_aliq_pis_st.ToString());
            TXT_VALOR_RED_ALIQ_BC_ICMS_ST.Text = PUB_FUNCOES.FormataNumerico(o_tb_produto_imposto.valor_red_aliq_bc_icms_st.ToString());
            TXT_VALOR_RED_ALIQ_ICMS.Text = PUB_FUNCOES.FormataNumerico(o_tb_produto_imposto.valor_red_aliq_icms.ToString());

            

        }

        protected void BTN_SALVAR_Click(object sender, EventArgs e)
        {
            int id_produto = 0;
            string msg = string.Empty;
            try
            {
                if (TXT_DESCRICAO.Text != string.Empty && TXT_ID_NCM.Text != string.Empty 
                   && TXT_VALOR_VENDA.Text != string.Empty
                   && TXT_ID_GENERO_PRODUTO_SERVICO.Text != string.Empty
                   && DDL_ID_TIPO_ITEM.SelectedValue != string.Empty)
                {

                    if (DDL_ID_MARCA.SelectedValue != string.Empty)
                        o_tb_produto.id_marca = Convert.ToInt32(DDL_ID_MARCA.SelectedValue);

                    if (DDL_ID_PRODUTO_GRUPO.SelectedValue != string.Empty)
                        o_tb_produto.id_grupo = Convert.ToInt32(DDL_ID_PRODUTO_GRUPO.SelectedValue);

                    if (DDL_ID_CATEGORIA.SelectedValue != string.Empty)
                        o_tb_produto.id_categoria = Convert.ToInt32(DDL_ID_CATEGORIA.SelectedValue);


                    if (TXT_ID_NCM.Text != string.Empty)
                        o_tb_produto.id_ncm = Convert.ToInt32(TXT_ID_NCM.Text);

                    if (TXT_EXTIPI.Text != string.Empty)
                        o_tb_produto.extipi = Convert.ToInt32(TXT_EXTIPI.Text);

                    if (TXT_ID_GENERO_PRODUTO_SERVICO.Text != string.Empty)
                        o_tb_produto.id_genero_produto_servico = Convert.ToInt32(TXT_ID_GENERO_PRODUTO_SERVICO.Text);


                    if (DDL_ID_TIPO_ITEM.SelectedValue != string.Empty)
                        o_tb_produto.id_tipo_item = Convert.ToInt32(DDL_ID_TIPO_ITEM.SelectedValue);

                    if (DDL_ID_TIPO_PRODUCAO.SelectedValue != string.Empty)
                        o_tb_produto.id_tipo_producao = Convert.ToInt32(DDL_ID_TIPO_PRODUCAO.SelectedValue);

                    if (TXT_EAN.Text != string.Empty)
                        o_tb_produto.ean = TXT_EAN.Text;

                    if (DDL_ID_SERVICO.SelectedValue != string.Empty)
                        o_tb_produto.id_servico_issqn = Convert.ToInt32(DDL_ID_SERVICO.SelectedValue);

                    o_tb_produto.descricao = TXT_DESCRICAO.Text;
                    
                    o_tb_produto.valor_custo = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_CUSTO.Text));
                    o_tb_produto.valor_venda = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_VENDA.Text));
                    o_tb_produto.valor_custo_medio = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_CUSTO_MEDIO.Text));
                    o_tb_produto.valor_margem_lucro = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_MARGEM_LUCRO.Text));
                    o_tb_produto.id_unidade_medida = Convert.ToInt32(PUB_FUNCOES.TrataInteiro(DDL_ID_UNIDADE_MEDIDA.SelectedValue));
                    
                    o_tb_produto.sit_ativo = Convert.ToBoolean(CHK_SIT_ATIVO.Checked);
                    o_tb_produto.dt_cadastro = DateTime.Now;


                    // PRODUTO DETALHE
                    if (DDL_ID_COR.SelectedValue != string.Empty)
                        o_tb_produto_detalhe.id_cor = Convert.ToInt32(DDL_ID_COR.SelectedValue);

                    if(TXT_LARGURA.Text != string.Empty)    
                        o_tb_produto_detalhe.largura = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_LARGURA.Text));

                    if(TXT_PESO_BRUTO.Text != string.Empty)
                        o_tb_produto_detalhe.peso_bruto = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_PESO_BRUTO.Text));

                    if(TXT_PESO_LIQUIDO.Text != string.Empty)
                        o_tb_produto_detalhe.peso_liquido = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_PESO_LIQUIDO.Text));

                    if(TXT_ALTURA.Text != string.Empty)
                        o_tb_produto_detalhe.altura = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_ALTURA.Text));

                    if(TXT_PROFUNDIDADE.Text != string.Empty)
                        o_tb_produto_detalhe.profundidade = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_PROFUNDIDADE.Text));

                    if (TXT_VOLUME.Text != string.Empty)
                        o_tb_produto_detalhe.volume = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VOLUME.Text));

                    if(DDL_ID_TIPO_COMPARTIMENTO.SelectedValue != string.Empty)
                        o_tb_produto_detalhe.id_tipo_compartimento = Convert.ToInt32(PUB_FUNCOES.TrataInteiro(DDL_ID_TIPO_COMPARTIMENTO.SelectedValue));


                    // IMPOSTOS

                    if (DDL_ID_ORIGEM_PRODUTO.SelectedValue != string.Empty)
                        o_tb_produto_imposto.id_origem_produto = Convert.ToInt32(DDL_ID_ORIGEM_PRODUTO.SelectedValue);
 
                    if (TXT_ID_IMPOSTO_CST_COFINS.Text != string.Empty)
                        o_tb_produto_imposto.id_cst_cofins = TXT_ID_IMPOSTO_CST_COFINS.Text;

                    if (TXT_ID_IMPOSTO_CST_ICMS.Text != string.Empty)
                        o_tb_produto_imposto.id_cst_icms = TXT_ID_IMPOSTO_CST_ICMS.Text;

                    if (TXT_ID_IMPOSTO_CST_IPI.Text != string.Empty)
                        o_tb_produto_imposto.id_cst_ipi = TXT_ID_IMPOSTO_CST_IPI.Text;

                    if (TXT_ID_IMPOSTO_CST_PIS.Text != string.Empty)
                        o_tb_produto_imposto.id_cst_pis = TXT_ID_IMPOSTO_CST_PIS.Text;

                   

                    // ICMS

                    if (DDL_ID_MODALIDADE_BC_ICMS.SelectedValue != string.Empty)
                        o_tb_produto_imposto.id_modalidade_bc_icms = Convert.ToInt32(DDL_ID_MODALIDADE_BC_ICMS.SelectedValue);


                    o_tb_produto_imposto.valor_aliq_icms = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_ALIQ_ICMS.Text));
                    o_tb_produto_imposto.valor_red_aliq_icms = Convert.ToDecimal(PUB_FUNCOES.TrataInteiro(TXT_VALOR_RED_ALIQ_ICMS.Text));

                    // ICMS ST
                    if (DDL_ID_MODALIDADE_BC_ICMS_ST.SelectedValue != string.Empty)
                        o_tb_produto_imposto.id_modalidade_bc_icms_st = Convert.ToInt32(PUB_FUNCOES.TrataInteiro(DDL_ID_MODALIDADE_BC_ICMS_ST.SelectedValue));

                    o_tb_produto_imposto.valor_aliq_mva_st = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_ALIQ_MVA_ST.Text));
                    o_tb_produto_imposto.valor_red_aliq_bc_icms_st = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_RED_ALIQ_BC_ICMS_ST.Text));
                    o_tb_produto_imposto.valor_aliq_icms_st = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_ALIQ_ICMS_ST.Text));

                    // PIS
                    o_tb_produto_imposto.valor_aliq_pis = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_ALIQ_PIS.Text));
                    o_tb_produto_imposto.valor_aliq_pis_st = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_ALIQ_PIS_ST.Text));

                    // COFINS
                    o_tb_produto_imposto.valor_aliq_cofins = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_ALIQ_COFINS.Text));
                    o_tb_produto_imposto.valor_aliq_cofins_st = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_ALIQ_COFINS_ST.Text));

                    // IPI
                    o_tb_produto_imposto.valor_aliq_ipi = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_ALIQ_IPI.Text));

                    // ISS
                    o_tb_produto_imposto.sit_retem_irrf = Convert.ToBoolean(CHK_SIT_RETEM_IRRF.Checked);

                    o_tb_produto_imposto.valor_aliq_irrf = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_ALIQ_IRRF.Text));
                    o_tb_produto_imposto.valor_aliq_iss = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_ALIQ_ISS.Text));
                    o_tb_produto_imposto.valor_aliq_csll = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_ALIQ_CSLL.Text));
                    o_tb_produto_imposto.valor_aliq_irpj = Convert.ToDecimal(PUB_FUNCOES.TrataDecimal(TXT_VALOR_ALIQ_IRPJ.Text));

                    using (TransactionScope scope = new TransactionScope())
                    {
                        if (HF_ID.Value != string.Empty)
                        {
                            //ALTERA O PRODUTO

                            id_produto = Convert.ToInt32(HF_ID.Value);

                            o_tb_produto.id = id_produto;
                            b_tb_produto.Alterar(o_tb_produto);

                            // ALTERA PRODUTO DETALHE

                            o_tb_produto_detalhe.id_produto = id_produto;
                            b_tb_produto_detalhe.Alterar(o_tb_produto_detalhe);

                            // ALTERA PRODUTO IMPOSTO

                            o_tb_produto_imposto.id_produto = id_produto;
                            b_tb_produto_imposto.Alterar(o_tb_produto_imposto);

                            o_tb_produto_usuario.dt_atualizacao = DateTime.Now;
                            o_tb_produto_usuario.id_produto = o_tb_produto.id;
                            o_tb_produto_usuario.id_usuario = PUB_SESSAO.Id;
                            b_tb_produto_usuario.Incluir(o_tb_produto_usuario);
                            msg = "Alteração realizada com sucesso.";
                        }
                        else
                        {
                            // INCLUI O PRODUTO
                            id_produto = b_tb_produto.Incluir(o_tb_produto);

                            // INCLUIR PRODUTO DETALHE;
                            o_tb_produto_detalhe.id_produto = id_produto;
                            b_tb_produto_detalhe.Incluir(o_tb_produto_detalhe);

                            // INCLUIR PRODUTO IMPOSTO
                            o_tb_produto_imposto.id_produto = id_produto;
                            b_tb_produto_imposto.Incluir(o_tb_produto_imposto);

                            // INCLUIR USUARIO HISTORICO
                            o_tb_produto_usuario.id_produto = id_produto;                            
                            o_tb_produto_usuario.dt_atualizacao = DateTime.Now;
                            o_tb_produto_usuario.id_usuario = PUB_SESSAO.Id;
                            b_tb_produto_usuario.Incluir(o_tb_produto_usuario);
                            msg = "Inclusão realizada com sucesso.";
                        }


                        Master.MSG_ALERTA(msg, "default.aspx", false);

                        scope.Complete();

                       
                    }



                }


            }
            catch (Exception ex)
            {
                b_tb_log_erro.IncluirLogErro(ex);                
                Master.MSG_ALERTA("Erro ao tentar incluir o produto.");
                
            }          


        }


        protected void BTN_CANCELAR_Click(object sender, EventArgs e)
        {


            Response.Redirect("default.aspx", false);
        }
        


        protected void BTN_SELECIONAR_GEN_PROD_SERV_Click(object sender, EventArgs e)
        {


            try
            {
                GridView grv = (GridView)PUB_FUNCOES.EncontrarControle(PUB_FUNCOES.MasterPageConteudo(), "GRV_TB_GENERO_PRODUTO_SERVICO");

                if (grv != null)
                {
                    string id = PUB_FUNCOES.RetornaValorDataKeyGridView(grv, "id");
                    o_tb_genero_produto_servico = b_tb_genero_produto_servico.SelecionarObjetoPorId(Convert.ToInt32(id));
                    TXT_ID_GENERO_PRODUTO_SERVICO.Text = id;
                    TXT_DESC_GEN_PROD_SERV.Text = o_tb_genero_produto_servico.desc_genero_produto_servico.ToString();

                    PUB_FUNCOES.CheckBoxGridView(grv, "CHK_ID", false);
              
                }
            
            }
            catch (Exception ex)
            {

                b_tb_log_erro.IncluirLogErro(ex);
                Master.MSG_ALERTA("Erro ao tentar selecionar o genero produto na modal.");
            }
          

             
        }



    }
}